package com.javasm.springboot3.controller;

import com.javasm.springboot3.entity.Person;
import com.javasm.springboot3.entity.Student;
import com.javasm.springboot3.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;

/**
 * @Author：longjinyi
 * @Version：1.0
 * @Date：2021/12/27-20:09
 * @Since:jdk1.8
 * @Description:
 */
//@RestController
@RequestMapping("user")
//在这里读取配置文件里面的配置，然后给当前类里面的属性进行赋值
//不一定是在实体类里面读取配置文件并进行赋值，在controller类中也可以
//读取配置文件用到的注解还是@ConfigurationProperties，加不加括号要根据具体情况来定
@ConfigurationProperties
public class MyController {


    //在这里获取到application.properties配置文件中的name参数，对MyController类中的属性进行赋值，而且MyController类使用@RestController注解将自己放入spring容器中，
    //然后spring创建MyController类的对象myController。这里使用@Value注解，根据注解下面的参数名获取spring容器中MyController类的属性name，然后将该对象注入给@Resource注解下面的参数
    //这里的属性不加@Resource注解，而是加@Value注解
    //@Value注解的作用：从application.properties配置文件中找到与注解下面的参数名name相匹配的配置的K，然后将配置中与k对应的value赋给下面的参数
    //注意@Value注解的括号中的k值要与注解下面的参数名相同，不然无法注入
    //这个注解不依赖于set和get方法，它只是读取application.properties配置文件里面的内容
    //然后通过请求打印该参数
    @Value("${name}")
    private String name;

    @Value("${age}")
    private Integer age;


    //在这里获取到读取application.properties配置文件中的user对象，对User类中的属性进行赋值，而且User类使用@Component注解将自己放入spring容器中，
    //然后spring创建User类的对象user。这里使用@Resource注解根据注解下面的对象名获取spring容器中User类的对象user，然后将该对象注入给@Resource注解下面的对象
    //然后通过请求打印该对象
    @Resource
    private User user;


    //读取配置文件里面的对象li
    @Autowired
    private Student student;

    //读取配置文件里面的stuMap集合并进行赋值
    @Autowired
    private Person person;


    //读取配置文件里面的nameId值，并赋给注解下面的参数
    @Value("${nameId}")
    private String nameId;


    //读取配置文件里面的myage值，并赋给注解下面的参数
    @Value("${myage}")
    private Integer myage;


    //读取配置文件里面的id值，并赋给注解下面的参数
    //每次读取得到的id值都一模一样
    //无法实现前后读取的id值不同
    @Value("${id}")
    private String id;

    @RequestMapping("controller")
    public String testController() {

        System.out.println(name);

        System.out.println(age);
        return "springboot  脚手架创建";
    }


    @RequestMapping("list")
    public String user() {

        System.out.println(user);
        return "springboot  脚手架创建";
    }


    @RequestMapping("stu")
    public String stu() {

        System.out.println(student);
        return "springboot  脚手架创建";
    }


    @RequestMapping("per")
    public String per() {

        System.out.println(person);
        return "springboot  person";
    }


    @RequestMapping("id")
    public String id() {

        System.out.println(id);
        return "springboot  id";
    }


    @RequestMapping("nameId")
    public String nameId() {

        System.out.println(nameId);
        return "springboot  nameId";
    }


    @RequestMapping("myage")
    public String myage() {

        System.out.println(myage);
        return "springboot  myage";
    }
}
